home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 5 / MacMania 5.toast / / Internet software / Analog 2.0 / Analog 2.0 Src / analhea2.h < prev    next >
Text File  |  1997-02-12  |  21KB  |  564 lines

  1. /*** analhea2.h; header file for analog version 2.0 ***/
  2. /* Please read Readme.html, or http://www.statslab.cam.ac.uk/~sret1/analog/ */
  3.  
  4. /*** These things are not intended to be user definable;
  5.      user definable headers are in analhead.h ***/
  6.  
  7. #ifndef ANALHEAD2
  8. #define ANALHEAD2
  9.  
  10. /*** First some #define's and #include's. Start with system specific ones ***/
  11.  
  12. #define VNUMBER "2.0"    /* the version number of this program */
  13.  
  14. #ifdef __MWERKS__
  15. #define MAC        /* So MWERKS compiler automatically switches to Mac */
  16. #endif
  17.  
  18. #ifdef VERSION
  19. #undef VERSION
  20. #endif
  21.  
  22. #ifdef MAC
  23. #define MAC_EVENTS
  24. #define WEBSTAR
  25. #define NETPRESENZ
  26. #define NOPIPES
  27. #define MACDIRENT
  28. #include <MacHeaders.h>
  29. #include <sioux.h>
  30. #define VERSION VNUMBER "/Mac"
  31. #define DIRSEP ':'
  32. #endif
  33.  
  34. #ifdef DOS
  35. #define NODNS
  36. #define VERSION VNUMBER "/DOS"
  37. #define DIRSEP '\\'
  38. #endif
  39.  
  40. #ifdef VMS
  41. #define NOPIPES
  42. #define VMSDIRENT
  43. #define VERSION VNUMBER "/VMS"
  44. #define DIRSEP '/'
  45. #endif
  46.  
  47. #ifdef UNIX
  48. #define VERSION VNUMBER "/Unix"
  49. #define DIRSEP '/'
  50. #endif
  51.  
  52. #ifdef WIN32
  53. #define VERSION VNUMBER "/Win32"
  54. #define DIRSEP '\\'
  55. #endif
  56.  
  57. /* If no OS is defined, the compilation will fail by not knowing VERSION */
  58.  
  59. #include <stdio.h>
  60. #include <stdlib.h>
  61. #include <math.h>
  62. #include <string.h>
  63. #include <time.h>
  64. #include <ctype.h>
  65. #ifndef NODIRENT
  66. #ifndef VMSDIRENT
  67. #ifndef MACDIRENT
  68. #include <dirent.h>          /* Normal dirent */
  69. #include <sys/types.h>
  70. #include <sys/stat.h>
  71. #else
  72. #include "macdir.h"          /* Mac dirent */
  73. #endif
  74. #else
  75. #define VMS_FSPEC_MAX 256    /* VMS dirent */
  76. #include <descrip.h>
  77. #endif
  78. #endif
  79. #ifndef NODNS
  80. #ifdef MAC
  81. #include <Gestalt.h>
  82. #include <MacTCP.h>
  83. #include <OpenTransport.h>
  84. #include <OpenTptInternet.h>
  85. #include <AddressXlation.h>
  86. #else
  87. #include <sys/socket.h>
  88. #include <netinet/in.h>
  89. #include <netdb.h>
  90. #include <arpa/inet.h>
  91. #define INET_ADDR_ERR (-1)   /* what inet_addr() returns on error */
  92. #endif
  93. #endif
  94. #ifdef MAC_EVENTS
  95. #define MAC_IDLE_FREQ (200)
  96. #endif
  97.  
  98. #ifdef TRUE  /* I suppose everyone else defines TRUE = 1, but I won't */
  99. #undef TRUE  /* risk it by doing an #ifndef! */
  100. #endif
  101. #define TRUE (1)
  102. #ifdef FALSE
  103. #undef FALSE
  104. #endif
  105. #define FALSE (0)
  106. #ifdef ON
  107. #undef ON
  108. #endif
  109. #define ON (TRUE)
  110. #ifdef OFF
  111. #undef OFF
  112. #endif
  113. #define OFF (FALSE)
  114. #ifdef OK
  115. #undef OK
  116. #endif
  117. #define OK (0)
  118. #ifdef NONE
  119. #undef NONE
  120. #endif
  121. #define NONE (0)
  122. #ifdef ERR
  123. #undef ERR
  124. #endif
  125. #define ERR (-1)
  126. #ifdef UNSET
  127. #undef UNSET
  128. #endif
  129. #define UNSET (-1)
  130. #ifdef ENGLISH           /* output languages */
  131. #undef ENGLISH
  132. #endif
  133. #define ENGLISH (0)
  134. #ifdef FRENCH
  135. #undef FRENCH
  136. #endif
  137. #define FRENCH (1)
  138. #ifdef GERMAN
  139. #undef GERMAN
  140. #endif
  141. #define GERMAN (2)
  142. #ifdef ITALIAN
  143. #undef ITALIAN
  144. #endif
  145. #define ITALIAN (3)
  146. #ifdef SPANISH
  147. #undef SPANISH
  148. #endif
  149. #define SPANISH (4)
  150. #ifdef US_ENGLISH
  151. #undef US_ENGLISH
  152. #endif
  153. #define US_ENGLISH (5)
  154. #ifdef DANISH
  155. #undef DANISH
  156. #endif
  157. #define DANISH (6)
  158. #define SENSITIVE (0)    /* as in, "Case ... filesystem" */
  159. #define INSENSITIVE (1)
  160. #define BYREQUESTS (0)       /* ways of sorting */
  161. #define BYBYTES (1)
  162. #define ALPHABETICAL (2)
  163. #define RANDOMLY (3)
  164. #define BYPAGES (4)
  165. #define APPROX (2)       /* for hostname counting */
  166. #define NETPRESENZLINE (4)
  167. #define WEBSTARLINE (3)
  168. #define COMMON (2)
  169. #define NCSAOLD (1)
  170. #define CORRUPT (0)
  171. #define PREFORMATTED (3)   /* output types */
  172. #define CACHE (2)
  173. #define ASCII (1)
  174. #define HTML (0)
  175. #ifdef MAX
  176. #undef MAX
  177. #endif
  178. #define MAX(a,b) (((a)>(b))?(a):(b))
  179. #ifdef MIN
  180. #undef MIN
  181. #endif
  182. #define MIN(a,b) (((a)<(b))?(a):(b))
  183. #ifdef ROUND
  184. #undef ROUND
  185. #endif            /* round double to nearest integer (as double) */
  186. #define ROUND(x) (((x)-(floor(x)))>=0.5?ceil(x):floor(x))
  187. #define STREQ(a,b) (strcmp(a,b)==0)
  188. #ifdef INFINITY
  189. #undef INFINITY
  190. #endif            /* something very big (but that will fit in a long) */
  191. #define INFINITY (2000000000)
  192. #define SUNDAY (0)
  193. #define MONDAY (1)
  194. #define TUESDAY (2)
  195. #define WEDNESDAY (3)
  196. #define THURSDAY (4)
  197. #define FRIDAY (5)
  198. #define SATURDAY (6)
  199. #define ISLEAPFEB(m,y) (((m)==1)&&(((y)%4)==0))  /* Feb in leap year */
  200. #define ISLEAPJF(m,y) (((m)<=1)&&(((y)%4)==0))  /* Jan or Feb in leap year */
  201. /* NB Every 4th year from 1901 to 2099 is a leap year */
  202. #define MAGICNO(x,s,b) {register unsigned char *r; \
  203.             for(x = 0, r = (unsigned char *)s; *r != '\0'; r++) { \
  204.               x = (x << 1) + (int)(*r); \
  205.               while (x >= (b)) \
  206.                 x -= b; }}
  207. /* magicno as macro not fn. for speed, tho' appears to make little diff. */
  208. /* x is answer, s is string to be magicked, b is base (no, of hash bins) */
  209.  
  210. #define DOMHASHSIZE (1354)
  211. /* = 2 * 26^2 + 2 by description of domain algorithm */
  212. #define NO_ERRS (34)   /* how many error types there are (in init.c) */
  213. #define MAXERRLENGTH (40)  /* the longest one */
  214. #define NO_STATUS (22) /* how many status codes are defined */
  215. #define MAXSTATUSLENGTH (35)
  216.  
  217. /*** Now include the user-definable header things ***/
  218.  
  219. #include "analhead.h"
  220.  
  221. /*** Next some global structures ***/
  222.  
  223. typedef int flag;
  224.  
  225. struct timestruct {        /* some things we might want to know about a
  226.                   particular time */
  227.   int date;                /* the day of the month */
  228.   int monthno;             /* 0 for Jan, ... , 11 for Dec */
  229.   int year;                /* 4 digits */
  230.   int hr;                  /* 0 to 23 */
  231.   int min;                 /* 0 to 59 */
  232.   long code;               /* an increasing (but not linear) function of time,
  233.                   for quick comparisons. Defined in timecode(). */
  234. };
  235.  
  236. struct monthly {           /* a structure for a year's worth of monthly data */
  237.   int reqs[12];            /* the number of requests on each month */
  238.   int pages[12];           /* and page requests ditto */
  239.   double bytes[12];        /* and bytes ditto */
  240.   struct monthly *next;    /* where the next year's data is */
  241. };
  242.  
  243. struct daily {             /* similarly, for a month's worth of daily data */
  244.   int reqs[31];            /* NB Day n is stored in location (n - 1) */
  245.   int pages[31];
  246.   double bytes[31];
  247.   struct daily *next;
  248. };
  249.  
  250. struct hourly {            /* and for a day's worth of hourly data */
  251.   int reqs[24];
  252.   int pages[24];
  253.   double bytes[24];
  254.   struct hourly *next;
  255. };
  256.  
  257. struct weekly {             /* a structure for weekly data */
  258.   int reqs;
  259.   int pages;
  260.   double bytes;
  261.   struct timestruct start;  /* the start of the week */
  262.   struct weekly *next;
  263. };
  264.  
  265. struct genstruct {           /* relevant information about an object */
  266.   char *name;                /* its name as it appears in the logfile */
  267.   char *alias;               /* its name translated, if different */
  268.   int reqs;                  /* its number of requests */
  269.   int pages;                 /* and page requests due to it */
  270.   double bytes;              /* the number of bytes transferred due to it */
  271.   flag pre7;                 /* has been used before last 7 days? */
  272.   flag last7;                /* has been used in the last 7 days? */
  273.   flag wanted;               /* is this item included or excluded? */
  274.   flag ispage;               /* is this item a page? */
  275.   struct genstruct *next;    /* the next object in the list */
  276. };
  277.  
  278. struct dnscache {            /* information about DNS lookups */
  279.   char *number;              /* the numerical IP address */
  280.   char *alias;               /* the translation (or NULL if unresolvable) */
  281.   time_t altimecode;         /* the time at which its alias was looked up */
  282.   struct dnscache *next;
  283. };
  284.  
  285. struct domain {              /* and domains */
  286.   char *id;                  /* can be as long as host for subdomains */
  287.   char *revid;               /* same reversed */
  288.   char *name;                /* the geographical location of the domain */
  289.   int reqs;
  290.   int pages;
  291.   double bytes;
  292.   int nexti;                 /* the index of the next domain alphabetically */
  293.   struct domain *next;       /* the next subdomain of the current domain */
  294. };
  295.  
  296. struct alias {      /* aliases from the configuration file */
  297.   char from[MAXSTRINGLENGTH];
  298.   char to[MAXSTRINGLENGTH];
  299.   struct alias *next;
  300. };
  301.  
  302. struct include {   /* a list of included/excluded things */
  303.   char name[MAXSTRINGLENGTH];
  304.   int in;           /* TRUE, FALSE or UNSET */
  305.   struct include *next;
  306. };
  307.  
  308. struct loglist {   /* a list of logfiles */
  309.   char name[MAXSTRINGLENGTH];
  310.   char prefix[MAXSTRINGLENGTH];
  311.   struct loglist *next;
  312. };
  313.  
  314. struct stringlist {   /* a simple list of strings */
  315.   char name[MAXSTRINGLENGTH];
  316.   struct stringlist *next;
  317. };
  318.  
  319. /*** Finally, a list of all the functions defined in analog ***/
  320. /* in alias.c */
  321. extern flag doaliaslist(char *name, struct alias *listhead);
  322. #ifndef NODNS
  323. flag dnsresolve(char *hostn);
  324. #endif
  325. extern int doaliashost(char *hostn);
  326. extern char *reversehostname(char *hostn);
  327. extern int doaliasfile(char *filename);
  328. extern int doaliasref(char *name);
  329. extern int doalias(char *name, char codeletter);
  330. extern void allaliases(struct genstruct **objhead,
  331.   struct genstruct **objhead2, int hashsize, int *totalobjs, int *totalobjs7,
  332.   int *totalnew7, char code);
  333. extern int hosttodomcode(char *hostn);
  334. extern void urltodir(char *filename);
  335. extern char *urltoext(char *filename);
  336. extern flag included(char *name, flag ispage, struct include *listhead);
  337. extern flag itemwanted(char *name, flag ispage, char codeletter);
  338. /* in analog.c -- only main() */
  339. /* in formgen.c */
  340. extern void genopts(FILE *outf, char name[17], char plural[16], int sortby,
  341.   char codeletter);
  342. extern void repchoice(FILE *outf, char name[MAXSTRINGLENGTH], char codeletter,
  343.   flag qq);
  344. extern void formgen(void);
  345. /* in hash.c */
  346. extern struct genstruct *hashadd(struct genstruct **objhead, int hashsize,
  347.   char *name, int reqs, double bytes, int pages, flag last7q, int *totalobjs,
  348.   int *totalobjs7, int *totalnew7, flag al, flag maskq, flag ispage,
  349.   struct genstruct *freespace, int magicnumber, char codeletter);
  350. extern struct dnscache *dnshashadd(char *number, char *alias,
  351.   time_t altimecode);
  352. extern void domhashadd(char *hostn, int reqs, int pages, double bytes);
  353. extern void subdomadd(char *id, char *name);
  354. extern void addref(char *fromurl, char *filename, flag ispage, double bytes,
  355.   flag last7q, flag filemaskq);
  356. extern void addbrowser(char *browser, flag ispage, double bytes, flag last7q);
  357. extern void adderr(char *errstr);
  358. extern flag approxhostfilled(char *space, unsigned int i);
  359. extern void approxhostfill(char *space, unsigned int i);
  360. extern void approxhosthashadd(char *hostn, flag last7q);
  361. extern void addmonthlydata(int year, int monthno, int reqs, int pages,
  362.   double bytes);
  363. extern void adddailydata(int year, int monthno, int date, int reqs, int pages,
  364.   double bytes);
  365. extern void addhourlydata(int year, int monthno, int date, int hr, int reqs,
  366.   int pages, double bytes);
  367. extern void addweeklydata(int year, int monthno, int date, int reqs, int pages,
  368.   double bytes);
  369. extern void datehash(int year, int monthno, int date, int hr, int min,
  370.   long thistimecode, int reqs, int pages, double bytes);
  371. extern void errsort(int errorder[NO_ERRS]);
  372. extern double bytefloor(double bytes, char *str);
  373. extern int reqfloor(int reqs, char *str);
  374. extern struct genstruct *gensort(struct genstruct **objhead, int hashsize,
  375.   int tot_reqs, int tot_pages, double tot_bytes, int sortby, char *minreqstr,
  376.   char *minpagestr, char *minbytestr, struct include *includehead,
  377.   flag alphahost, int *maxreqs, int *maxpages, double *maxbytes,
  378.   int *maxlength);
  379. extern int domsort(void);
  380. extern void subdomsort(void);
  381. /* in init.c */
  382. extern void defaults(void);
  383. extern void init_structs(void);
  384. extern void othervars(void);
  385. extern void configline(char inputline[MAXLINELENGTH]);
  386. extern flag config(char *filename);
  387. extern void commandline(int argc, char **argv);
  388. extern void initialise(int argc, char **argv);
  389. extern void pvfilelist(struct stringlist *head,
  390.   char filetype[MAXSTRINGLENGTH]);
  391. extern void printvbles(void);
  392. /* in init2.c */
  393. extern void domainscan(void);
  394. extern void dnscachescan(void);
  395. extern void configwarning(char *comname, char *inputline);
  396. extern void configwarning2(char *inputline);
  397. extern void configwarning3(char *comname, char *inputline);
  398. extern void addonelogfile(struct loglist **p, char name[MAXSTRINGLENGTH],
  399.   char prefix[MAXSTRINGLENGTH]);
  400. extern void addwildlogs(struct loglist **p, char name[MAXSTRINGLENGTH],
  401.   char prefix[MAXSTRINGLENGTH]);
  402. extern void addlogfile(struct loglist **p, char name[MAXSTRINGLENGTH],
  403.   char prefix[MAXSTRINGLENGTH], flag wildexpand);
  404. extern void includeone(char *name, struct include **p, struct include *head,
  405.   int in, char *comname, char *inputline);
  406. extern void include(char *name, struct include **p, struct include *head,
  407.   int in, char *comname, char *inputline, int rc, flag *maskq);
  408. extern void configalias(char *from, char *to, struct alias **p, char *comname,
  409.   char *inputline, int rc);
  410. extern void fromtodate(char *tstr, struct timestruct *t, flag from,
  411.   char *comname, char *inputline, int rc);
  412. extern void configstr(char *name, char *target, char *comname, char *inputline,
  413.   int rc);
  414. extern void addonestrlist(struct stringlist **p, char *name);
  415. extern void addwildstrlist(struct stringlist **p, char *name);
  416. extern void configstrlist(char *name, struct stringlist **p, char *comname,
  417.   char *inputline, int rc, flag wildexpand);
  418. extern void configcols(char *cols, char *target, char *comname,
  419.   char *inputline, int rc);
  420. extern void configchar(char *str, char *target, char *comname, char *inputline,
  421.   int rc);
  422. extern void configint(char *number, int *target, char *comname,
  423.   char *inputline, int rc);
  424. extern void configsizet(char *number, size_t *target, char *comname,
  425.   char *inputline, int rc);
  426. extern void configsortby(char *method, int *target, char *comname,
  427.   char *inputline, int rc);
  428. extern void onoff(char *method, flag *target, char *comname, char *inputline,
  429.   int rc);
  430. extern void clflag(flag *f, char *arg);
  431. extern void cldaterep(flag *f, char *graph, char *arg);
  432. extern void clgenrep(flag *f, int *sortby, char *minreqstr, char *minpagestr,
  433.   char *minbytestr, char *arg);
  434. extern flag clfile(char *filename, char *arg);
  435. extern void alias_to_lower(struct alias *head);
  436. extern void include_to_lower(struct include *head);
  437. extern void pvcols(char *cols);
  438. extern void pvtime(char name[15], flag q, char graph, int unit, char cols[],
  439.   int rows);
  440. extern void pvgen(char name[17], flag q, int sortby, char *minreqstr,
  441.   char *minpagestr, char *minbytestr, char cols[], char singular[20],
  442.   char plural[21]);
  443. extern void pvinout(char name[14], struct include *head);
  444. extern void pvalias(char name[8], struct alias *head);
  445. /* in macstuff.c */
  446. #ifdef MAC_EVENTS
  447. extern void MacInit(void);
  448. extern void MacFini(void);
  449. extern void MacIdle(void);
  450. #endif
  451. #ifdef MAC
  452. #ifndef NODNS
  453. int IpAddr2Name(char *hostname);
  454. void ResolverCleanup(void);
  455. #endif
  456. #endif
  457. /* in output.c */
  458. extern void output(struct genstruct *rsorthead, struct genstruct *isorthead,
  459.   struct genstruct *tsorthead, struct genstruct *Ssorthead, int firstdom,
  460.   struct genstruct *fsorthead, struct genstruct *bsorthead,
  461.   struct genstruct *Bsorthead, int errorder[]);
  462. /* in output2.c */
  463. extern void gotos(FILE *outf, char c);
  464. extern void htmlputc(char c, FILE *outf);
  465. extern void htmlfprintf(FILE *outf, char string[MAXSTRINGLENGTH]);
  466. extern double finddivider(double bytes, char *bprefix);
  467. extern void asciiline(FILE *outf);
  468. extern void barplot(FILE *outf, int n);
  469. extern void precols(FILE *outf, char *wantcols, char codeletter, flag byq,
  470.   flag pageq);
  471. extern void printcolheads(FILE *outf, char *wantcols, int fieldwidth,
  472.   int pfieldwidth, int bfieldwidth, char bprefix[2], char name[20], char type,
  473.   flag byq, flag pageq, flag name1st);
  474. extern void printcols(FILE *outf, char *wantcols, int reqs, int pages,
  475.   double bytes, int fieldwidth, int pfieldwidth, int bfieldwidth,
  476.   double bdivider, int totreqs, int totpages, double totbytes, char type,
  477.   flag byq, flag pageq);
  478. extern int whatincluded(FILE *outf, int sortby, char *minreqstr,
  479.   char *minpagestr, char *minbytestr, char singular[27], char plural[29],
  480.   flag subdoms, char gender);
  481. extern int whatincludednop(int sortby, char *minreqstr, char *minpagestr,
  482.   char *minbytestr);
  483. extern void genout(FILE *outf, struct genstruct *sorthead, int tot_reqs,
  484.   int tot_pages, double tot_bytes, int sortby, char *minreqstr,
  485.   char *minpagestr, char *minbytestr, int max_reqs, int max_pages,
  486.   double max_bytes, char *wantcols, char anchor[10], char title[36],
  487.   char singular[22], char plural[24], char colhead[24], char gender,
  488.   char codeletter, flag alphahost, flag byq, flag pageq, struct include *links,
  489.   struct alias *aka, char baseurl[MAXSTRINGLENGTH]);
  490. extern void domout(FILE *outf, int firstdom);
  491. extern void datehead(FILE *outf, int maxreq, int maxpages, double maxbytes,
  492.   char *wantcols, char *graphtype, char anchor[11], char title[21],
  493.   char htmltitle[31], char colhead[13], char codeletter, int *unit,
  494.   int *fieldwidth, int *pfieldwidth, int *bfieldwidth, int *graphwidth,
  495.   double *bdivider);
  496. extern void dateline(FILE *outf, int reqs, int pages, double bytes,
  497.   char *wantcols, char graphtype, int fieldwidth, int pfieldwidth,
  498.   int bfieldwidth, int unit, double bdivider);
  499. extern void statusout(FILE *outf);
  500. extern void errout(FILE *outf, int errorder[NO_ERRS]);
  501. extern void gensum(FILE *outf);
  502. /* in sscanf.c */
  503. extern int sscanf_date(char *inputline, int *date, int *monthno, int *year,
  504.   int *hr, int *min);
  505. extern int sscanf_olddate(char *inputline, int *date, int *monthno, int *year,
  506.   int *hr, int *min);
  507. extern int sscanf_common(char *inputline, char hostn[MAXSTRINGLENGTH],
  508.   int *date, int *monthno, int *year, int *hr, int *min,
  509.   char filename[MAXSTRINGLENGTH], char referrer[MAXSTRINGLENGTH],
  510.   char agent[MAXSTRINGLENGTH], int *code, char bytestr[16], size_t preflength);
  511. extern int sscanf_ncsaold(char *inputline, char hostn[MAXSTRINGLENGTH],
  512.   int *monthno, int *date, int *hr, int *min, int *year,
  513.   char filename[MAXSTRINGLENGTH], size_t preflength);
  514. extern int sscanf_domains(char *inputline, char string1[MAXSTRINGLENGTH],
  515.   char string2[MAXSTRINGLENGTH]);
  516. extern int sscanf_config(char *inputline, char string1[MAXSTRINGLENGTH],
  517.   char string2[MAXSTRINGLENGTH], char string3[MAXSTRINGLENGTH]);
  518. extern int sscanf_referrer(char *inputline, int *date, int *monthno, int *year,
  519.   int *hr, int *min, char from[MAXSTRINGLENGTH], char to[MAXSTRINGLENGTH]);
  520. #ifdef WEBSTAR
  521. extern int sscanf_webstar(char *inputline, char hostn[MAXSTRINGLENGTH],
  522.   int *date, int *monthno, int *year, int *hr, int *min,
  523.   char filename[MAXSTRINGLENGTH], char referrer[MAXSTRINGLENGTH],
  524.   char agent[MAXSTRINGLENGTH], int *code, char bytestr[16], size_t preflength);
  525. #endif
  526. #ifdef NETPRESENZ
  527. typedef enum { NP_HTTP, NP_GOPHER, NP_ADMIN, NP_FTP, NP_GETFILE, NP_GETDIR,
  528.          NP_LOGIN, NP_LOGOUT, NP_CGI, NP_ERROR } NP_type;
  529. typedef struct { char *str; NP_type value; } MatchPairs;
  530. NP_type checkValue(char *typeStr, const MatchPairs table[]);
  531. NP_type checkType(char *typeStr);
  532. void build_agent(char agent[MAXSTRINGLENGTH], NP_type entryType,
  533.   char *entryTypeStr, NP_type actionType, char *actionTypeStr);
  534. int readDigits(char **from);
  535. int scan_path(char *inputline, char filename[MAXSTRINGLENGTH], int maxlen,
  536.   struct include *expandhead);
  537. int sscanf_netpresenz(FILE *logfile, char *inputline,
  538.   char hostn[MAXSTRINGLENGTH], int *date, int *monthno, int *year, int *hr,
  539.   int *min, char filename[MAXSTRINGLENGTH], char referer[MAXSTRINGLENGTH],
  540.   char agent[MAXSTRINGLENGTH], int *code, char bytestr[16], size_t preflength);
  541. #endif
  542. /* in utils.c */
  543. extern flag matchq(char *string, char *pattern, flag whole);
  544. extern flag wildmatch(char *string, char *pattern, char **w1, char **w2);
  545. extern int strtomonth(char month[4]);
  546. extern int dayofdate(int date, int monthno, int year);
  547. extern int minsbetween(int date1, int monthno1, int year1, int hr1, int min1,
  548.   int date2, int monthno2, int year2, int hr2, int min2);
  549. extern long timecode(int date, int monthno, int year, int hr, int min);
  550. extern struct timestruct startofweek(struct timestruct atime);
  551. extern FILE *fopenlog(char *name, char logtype[12], flag *ispipe);
  552. extern int fcloselog(FILE *f, char *name, char logtype[12], flag ispipe);
  553. extern void int3printf(FILE *outf, int x, char sepchar, int fieldwidth);
  554. extern void double3printf(FILE *outf, double x, char sepchar, int fieldwidth);
  555. extern void doublefprintf(FILE *outf, double x);
  556. extern void *xmalloc(size_t size);
  557. extern void *xcalloc(size_t nelem, size_t elsize);
  558. extern char *strtolower(char *string);
  559. extern flag strtolowerf(char *string);
  560. extern char *strtoupper(char *string);
  561. extern int hoststrcmp(char *hostn1, char *hostn2);
  562. extern flag isnumeric(char *name);
  563. #endif  /* not previously included */
  564.